1 *PLAYER MISSILE INTERFACE TO BASIC 2 *CODE BY JEFF STANTON & DAN PINAL 3 *PLAYER SHAPES ARE STORED IN PAGE ONE P/M AREA 4 *MAX LENGTH 64 BYTES EACH 5 * 6 HPOSP0 EQU $D000 7 SHAPEL EQU $D4 ; LO BYTE WHERE SHAPE IS STORED 8 SHAPEH EQU $D5 ; HI BYTE 9 SHPML EQU $CE ; LO BYTE TO DRAW OR ERASE SHAPE IN P/M AREA 10 SHPMH EQU $CF ; HI BYTE 11 * 12 * CALL FROM BASIC 13 * A=USR(1536, PLAYER #,PLAYER LEN,OLD Y,NEW Y,NEW X) 14 ORG $600 15 * .TF "D:PMSUB.OBJ" 16 *TRANSFER VALUES IN USR FUNCTION THAT ARE STORED ON STACK TO SUBROUTINE 0600 68 17 START PLA ; PULL # OF ARG'S OFF STACK 0601 A200 18 LDX #$00 0603 68 19 PULL PLA ; DISCARD THE HIBYTE IT'S USELESS 0604 68 20 PLA ; GET VALUE 0605 9D9106 21 STA PLAYNUM,X 0608 E8 22 INX 0609 E005 23 CPX #$05 ; GOT ALL 5 YET? 060B D0F6 24 BNE PULL 25 *SETUP POINTERS TO MOVE SHAPE FROM STORAGE PLACE TO PLACE IN P/M AREA 060D AD9506 26 LDA NEWX ; HORIZONTAL POSITION 0610 AE9106 27 LDX PLAYNUM 0613 9D00D0 28 STA HPOSP0,X ; TELL ANTIC NEWX 0616 AD9606 29 LDA BASE ; HIBYTE OF PMBASE 0619 85D5 30 STA SHAPEH 061B 18 31 CLC 061C 6904 32 ADC #$04 ; SET FOR PLAYER 0 ADDRESS 061E 85CF 33 STA SHPMH 0620 AD9106 34 LDA PLAYNUM ; PLAYER 0623 C904 35 CMP #$04 ; MISSILES? 0625 B02F 36 BGE MISSILES 0627 AA 37 TAX ; PLAYER # BECOMES INDEX 0628 BD8506 38 LDA INDEX,X 062B 85D4 39 STA SHAPEL 062D CA 40 AA1 DEX ; WE INCREMENT SHPMH FOR EACH PLAYER UNLESS 0 062E 3004 41 BMI ERASE 0630 E6CF 42 INC SHPMH ; EACH INDIVIDUAL P/M AREA 256 BYTES APART 0632 D0F9 43 BNE AA1 ; ALWAYS 44 ERASE 0634 AD9306 45 LDA OLDY ; Y 0637 85CE 46 STA SHPML 0639 A900 47 LDA #$00 ; ERASE WITH 0 063B A8 48 TAY ; Y--O 063C 91CE 49 AB1 STA (SHPML),Y ; STORE IN PROPER P/M AREA 063E C8 50 INY ; NEXT BYTE 063F CC9206 51 CPY PLAYLEN ; DONE? 0642 90F8 52 BL AB1 0644 AD9406 53 LDA NEWY ; NEW Y 0647 85CE 54 STA SHPML ; SETUP POINTER TO PLOT 0649 A000 55 LDY #$00 064B B1D4 56 DRAW LDA (SHAPEL),Y ; LOAD BYTE FROM PLAYER SHAPE TABLE 064D 91CE 57 STA (SHPML),Y ; STORE IN PROPER P/M PLAYER AREA 064F C8 58 INY ; NEXT BYTE 0650 CC9206 59 CPY PLAYLEN ; DONE? 0653 90F6 60 BL DRAW 0655 60 61 RTS 62 *COMES HERE WITH ACC=MISSILE# PLUS 4 0656 38 63 MISSILES SEC 0657 E904 64 SBC #$04 ; GET PROPER MISSILE # (0-3) 0659 AA 65 TAX ; SET INDEX FOR MISSILE MASKS 065A C6CF 66 DEC SHPMH ; SHPMH WAS SET FOR PLAYERO, MISSILES ARE 1 065C AD9306 67 LDA OLDY ; OLD/CURRENT Y POS. ; \PAGE LOWER 065F 85CE 68 STA SHPML 0661 A000 69 LDY #$00 0663 B1CE 70 UNDRAW LDA (SHPML),Y ; LOAD OLD MISSILES DATA 0665 3D8906 71 AND MASKS,X ; ERASE IT BUT DON'T DISTURB OTHER MISSILES 0668 91CE 72 STA (SHPML),Y ; STORE COMBINED MISSILE DATA IN P/M AREA 066A C8 73 INY ; NEXT BYTE 066B CC9206 74 CPY PLAYLEN ; DONE? 066E 90F3 75 BL UNDRAW 0670 AD9406 76 LDA NEWY ; NEW Y POS. 0673 85CE 77 STA SHPML 0675 A000 78 LDY #$00 0677 B1CE 79 MDRAW LDA (SHPML),Y ; LOAD OLD MISSILES DATA 0679 1D8D06 80 ORA SHOTS,X ; MERGE SHOT DATA WITH OTHER MISSILES 067C 91CE 81 STA (SHPML),Y ; STORE NEW COMBINED MISSILE BYTE 067E C8 82 INY ; NEXT BYTE 067F CC9206 83 CPY PLAYLEN ; DONE? 0682 90F3 84 BL MDRAW 0684 60 85 RTS 0685 004080 86 INDEX DB $00,$40,$80,$C0 ; LO BYTE OF STORED PLAYER SHAPES 0689 FCF3CF 87 MASKS DB $FC,$F3,$CF,$3F ; MISSILE MASKS 068D 030C30 88 SHOTS DB $03,$0C,$30,$C0 ; MISSILE SHAPES 0691 00 89 PLAYNUM DS 1 0692 00 90 PLAYLEN DS 1 0693 00 91 OLDY DS 1 0694 00 92 NEWY DS 1 0695 00 93 NEWX DS 1 0696 00 94 BASE DS 1 ; HI BYTE PMBASE IS POKED IN FROM BASIC